home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / EGAVGA.SWG / 0154_Ellipse Routine.pas < prev    next >
Pascal/Delphi Source File  |  1995-03-03  |  1KB  |  80 lines

  1. procedure PutPixel(X,Y: word; Color: byte); assembler;
  2. asm
  3.  mov ax,y
  4.  mov bx,x
  5.  xchg ah,al
  6.  add bx,ax
  7.  shr ax,1
  8.  shr ax,1
  9.  add bx,ax
  10.  mov ax,0a000h
  11.  mov es,ax
  12.  mov al,Color
  13.  mov es:[bx],al
  14. end;
  15.  
  16. procedure Ellipse(X,Y,YRad,XRad: integer; Color: byte);
  17. var
  18.  EX,EY: integer;
  19.  YRadSqr,YRadSqr2,XRadSqr,XRadSqr2,D,DX,DY: longint;
  20. begin
  21.  EX:=0;
  22.  EY:=XRad;
  23.  YRadSqr:=longint(YRad)*YRad;
  24.  YRadSqr2:=2*YRadSqr;
  25.  XRadSqr:=longInt(XRad)*XRad;
  26.  XRadSqr2:=2*XRadSqr;
  27.  D:=XRadSqr-YRadSqr*XRad+YRadSqr div 4;
  28.  DX:=0;
  29.  DY:=YRadSqr2*XRad;
  30.  PutPixel(Y-EY,X,Color);
  31.  PutPixel(Y+EY,X,Color);
  32.  PutPixel(Y,X-YRad,Color);
  33.  PutPixel(Y,X+YRad,Color);
  34.  while (DX<DY) do begin
  35.   if (D>0) then begin
  36.    Dec(EY);
  37.    Dec(DY,YRadSqr2);
  38.    Dec(D,DY);
  39.   end;
  40.   Inc(EX);
  41.   Inc(DX,XRadSqr2);
  42.   Inc(D,XRadSqr+DX);
  43.   PutPixel(Y+EY,X+EX,Color);
  44.   PutPixel(Y+EY,X-EX,Color);
  45.   PutPixel(Y-EY,X+EX,Color);
  46.   PutPixel(Y-EY,X-EX,Color);
  47.  end;
  48.  Inc(D,(3*(YRadSqr-XRadSqr) div 2-(DX+DY)) div 2);
  49.  while (EY>0) do begin
  50.   if(D<0) then begin
  51.    Inc(EX);
  52.    Inc(DX,XRadSqr2);
  53.    Inc(D,XRadSqr+DX);
  54.   end;
  55.   Dec(EY);
  56.   Dec(DY,YRadSqr2);
  57.   Inc(D,YRadSqr-DY);
  58.   PutPixel(Y+EY,X+EX,Color);
  59.   PutPixel(Y+EY,X-EX,Color);
  60.   PutPixel(Y-EY,X+EX,Color);
  61.   PutPixel(Y-EY,X-EX,Color);
  62.  end;
  63. end;
  64. { little test code }
  65. begin
  66.  asm
  67.   mov ah,0
  68.   mov al,$13
  69.   int 10h
  70.  end;
  71.  Ellipse(50,50,40,20,13);
  72.  Readln;
  73.  asm
  74.   mov ah,0
  75.   mov al,$3
  76.   int 10h
  77.  end;
  78. end.
  79.  
  80.